#Server Mod
import os
import time
import threading
import main as single
import main_multi as multi
from loghelper import log
import json
time_interval=720   #默认签到间隔时间，单位minute(分钟)
mod=1  #单用户模式/自动判断
def runingtime():
    return int(time.time())
def control(time_interval,mod,event,detal):
    last_time=runingtime()
    while True:
        now_time=runingtime()
        if now_time>last_time+time_interval*60:
            if mod==1:
                try:
                    single.main()
                except:
                    log.info("single_user start failed")

            else:
                try:
                    multi.main_multi(True)
                except:
                    log.info("multi_user start failed")
            last_time=runingtime()
        if event.is_set():
            log.info("Stoping threading")
            break
        if(detal.is_set()):
            log.info("The Next check time is {}s".format(last_time-now_time+time_interval*60))
        time.sleep(20)
def command(detal):
    global mod
    global time_interval
    global show
    show=False #显示倒计时信息
    if show:
        detal.set()
    help="command windows\nstop:stop server\nreload:reload config and refish tiem\nsingle:test single config\nmulit:test mulit conifg\nmod x:x is refer single or multi 1 is single 2 is multi\nadd 'yourcookie'\nset user attribute value: such set username(*.json) enable(attribute) Ture(value)\ntime x:set interval time (minute)\nshow true/false:show the time count"
    log.info(help)
    while True: 
        command=input()
        if command=="help" or command=="?" or command=="":
            log.info(help)
        if command=="stop" or command=="exit":
            log.info("Stoping Server Plase Wait")
            return False

        if command=="reload":
            return True
        if command=="test":
            try:
                single.main()
            except:
                log.info("single_user start failed")
        if command=="single":
            try:
                single.main()
            except:
                log.info("single_user start failed")
        if command=="mulit":
            try:
                multi.main_multi(True)
            except:
                log.info("multi_user start failed")
        command=command.split(' ')
        for i in range(0,len(command)):
            if command[i]=="time":
                if len(command)==2:
                    time_interval=int(command[1])
                    log.info("switching interval to {} minute".format(time_interval))
                    return True
            if command[i]=="mod":
                if len(command)==2:
                    mod_new=int(command[1])
                    if mod_new >2 or mod_new <1:
                        log.info("error mod")
                    else:
                        mod=mod_new
                        log.info("switching mod to {}".format(mod))
                else:
                    log.info("Error Command")
            if command[i]=="show":
                if len(command)==2:
                    
                    if command[1]=="true":
                        show=True
                        detal.set()
                        log.info("switching to detail mod")
                        
                    if command[1]=="false":
                        detal.unset()
                        show=False
                        log.info("switching to slient mod")
    
                        
                else:
                    log.info("Error Command")
            if command[i]=="add":
                cookie=""
                for m in range(i,len(command)):
                    cookie+=command[m]
                log.info("adding")
                if (mod==1):
                    name="config"
                else:
                    log.info("Plase input your config name(*.json):")
                    name=input()
                config = {
                    'enable': True, 'version': 5,
                    'account': {
                         'cookie': cookie,
                         'login_ticket': '',
                         'stuid': '',
                         'stoken': ''
                    },
                        'mihoyobbs': {
                            'enable': True, 'checkin': True, 'checkin_multi': True, 'checkin_multi_list': [2, 5],
                            'read_posts': True, 'like_posts': True, 'un_like': True, 'share_post': True
                        },
                        'games': {
                            'cn': {
                                'enable': True,
                                'genshin': {'auto_checkin': True, 'black_list': []},
                                'hokai2': {'auto_checkin': False, 'black_list': []},
                                'honkai3rd': {'auto_checkin': False, 'black_list': []},
                                'tears_of_themis': {'auto_checkin': False, 'black_list': []},
                            },
                            'os': {
                                'enable': False, 'cookie': '',
                                'genshin': {'auto_checkin': False, 'black_list': []}
                            }
                        }
                        }
                        
                        
                file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/"+name+".json"
                file=open(file_path,'w')
                file.write(json.dumps(config))
                file.close()
                log.info("Saving OK")
            if command[i]=="set":
                if len(command)==4:
                    file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/"+command[1]+".json"
                    if os.path.exists(file_path)==False:
                        log.info("User is not exist")
                    else:
                        with open(file_path, "r") as f:
                            new_conifg=json.load(f)
                            value=command[3]
                            if (command[3]=="true"):
                                value=True
                            if (command[3]=="false"):
                                value=False
                            if (command[3].isdigit()):
                                value=int(command[3])
                            new_conifg[command[2]]=value

                            file=open(file_path,'w')
                            file.write(json.dumps(new_conifg))
                            file.close()
    return True

if __name__=='__main__':
    log.info('Running in Server Mod')
    time_interval = 720
    file_path = os.path.dirname(os.path.realpath(__file__)) + "/config/config.json"
    if os.path.exists(file_path):
        mod=1
    else:
        mod=2

    while True:
        log.info("switching to mod {}".format(mod))
        t1_stop = threading.Event()
        detal = threading.Event()
        thread1 = threading.Thread(name='time_check',target= control,args=(time_interval,mod,t1_stop,detal))
        thread1.start()
        try:
            if command(detal):
                t1_stop.set()
                continue
            else:
                t1_stop.set()
                break
        except:
            t1_stop.set()
            continue
               




    